#!/bin/sh
source /etc/profile
#linux执行如果报错./deploy.sh: line 14: syntax error near unexpected token `$'{\r''^C
#就执行这个命令格式化，因为window下编辑的sh脚本会有换行符linux无法识别==》sed -i 's/\r//g' deploy.sh
# 设置Java环境
#JAVA_HOME=/mydata/jdk-17.0.1
#export PATH=$PATH:$JAVA_HOME/bin
#export BUILD_ID=dontkillme
#定义程序名 及jar包的名
PROJECT_NAME=/app/vms/vms-1.0.0-SNAPSHOT.jar
SERVICE_NAME=vms
PROFILE_ACTIVE=prod
LOGS_DIR=/app/vms/
JAVA_GC_OPTS="-XX:+PrintGCDateStamps -Xloggc:gc.log -XX:+PrintGCDetails  -XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=heap.hprof"
## 编写判断程序是否正在运行的方法
isExist() {
  ## java -Xms128m -Xmx256m -jar digital-cloud-api-black-1.0-SNAPSHOT.jar --spring.profiles.active=dev >black.log 2>&1 &
  ## 首先查找进程号 ps -ef | grep digital-cloud-api-black-1.0-SNAPSHOT.jar | grep -v "grep" | awk '{print $2}'
  ##  pid=$(ps -ef | grep digital-cloud-api-black-1.0-SNAPSHOT.jar | grep -v "grep" | awk '{print $2}')
  pid=$(ps -ef | grep ${PROJECT_NAME} | grep -v "grep" | awk '{print $2}')
  echo ${pid}
  ## 如果进程号不存在，则返回0 否则返回1
  if [ -z "${pid}" ]; then
    return 0
  else
    return 1
  fi
}

##死循环方法,用户Docker容器进程不停止的
deadLoop(){
  while :; do
        echo "hello"
        sleep 300
      done
}

## 编写启动程序方法
start() {
  ## 调用 判断程序是否正在运行的方法
  isExist
  ## 判断方法返回值是否等于0 ，等于则不存在
  if [ $? -eq "0" ]; then
    echo "${PROJECT_NAME} is starting ......"
    nohup java -Xmx2048m -Xms2048m -Xmn1024m ${JAVA_GC_OPTS} -jar ${PROJECT_NAME} --spring.profiles.active=${PROFILE_ACTIVE} >black.log 2>&1 &
    echo "${PROJECT_NAME} startup success"
    # 容器启动成功，sh脚本进入死循环。防止Docker容器启动失败。非Docker部署就可以不要下面这个死循环了
    deadLoop

  else
    echo "${PROJECT_NAME} is running, pid=${pid} "
  fi
}

startWithSky() {
  ## 调用 判断程序是否正在运行的方法
  isExist
  ## 判断方法返回值是否等于0 ，等于则不存在
  if [ $? -eq "0" ]; then
    echo "${PROJECT_NAME} is starting ......"
    nohup java -Xms128m -Xmx256m  -jar ${PROJECT_NAME} --spring.profiles.active=${PROFILE_ACTIVE} >black.log 2>&1 &
    echo "${PROJECT_NAME} startup success"
  else
    echo "${PROJECT_NAME} is running, pid=${pid} "
  fi
}

## 编写停止程序的方法
stop() {
  ## 调用 判断程序是否正在运行
  isExist
  ## 判断是否存在，返回值0不存在
  if [ $? -eq "0" ]; then
    echo "${PROJECT_NAME} is not running ......"
  else
    echo "${PROJECT_NAME} is running, pid=${pid}, prepare kill it "
    kill -9 ${pid}
    echo "${PROJECT_NAME} has been successfully killed ......"
  fi
}
## 编写重启方法
restart() {
  ## 先停止再启动
  stop
  start
}



## 编写重启方法
restartWithSky() {
  ## 先停止再启动
  stop
  startWithSky
}

## 程序最开始执行的
## 根据用户输入，判断执行方法
case "$1" in
"start")
  start
  ;;
"startWithSky")
  startWithSky
  ;;
"stop")
  stop
  ;;
"deadLoop")
  deadLoop
  ;;
"restart")
  restart
  ;;
"restartWithSky")
  restartWithSky
  ;;
*)
  echo "please enter the correct commands: "
  echo "such as : sh startup.sh [ start | stop | restart ]"
  ;;
esac
